/*******************************************************************************
** 文件名称：uart0.h
** 文件作用：串口操作
** 编写作者：TomFree <付瑞彪>
** 编写时间：2019-12-20
** 文件备注：
**
** 更新记录：
**           2019-12-20 -> 创建文件                                 <Tom Free>
**
**           1 Tab == 4 Spaces     UTF-8     ANSI C Language
*******************************************************************************/
#ifndef __UART_H__
#define __UART_H__

#include "typedef.h"

#define UDRE0   5   /* 数据寄存器空 */
#define RXC0    7   /* 接收完成 */

/* 中断配置 */
typedef enum
{
	UART0_INTERRUPT_NONE    = 0x00, /* 无中断 */
	UART0_INTERRUPT_UDRE    = 0x01, /* 数据寄存器空 */
	UART0_INTERRUPT_TXC     = 0x02, /* 发送完成 */
	UART0_INTERRUPT_RXC     = 0x04, /* 接收完成 */
	UART0_INTERRUPT_ALL     = 0x07, /* 所有中断 */
} UART0_INTERRUPT;

/* 重定向寄存器 */
#if ((CHIP_TYPE == 8) || (CHIP_TYPE == 16) || (CHIP_TYPE == 32))
	#define UCSR0A	UCSRA
	#define UCSR0B	UCSRB
	#define UCSR0C	UCSRC
	#define UBRR0H	UBRRH
	#define UBRR0L	UBRRL
	#define UDR0	UDR
#endif  /* END */

/*******************************************************************************
** 函数名称：UART0_Init
** 函数作用：初始化UART0
** 输入参数：baud     - 波特率
**          int_mode - 中断模式
** 输出参数：无
** 使用范例：UART0_Init(9600, );
** 函数备注：
*******************************************************************************/
void UART0_Init(GM_U32 baud, UART0_INTERRUPT int_mode);

/*******************************************************************************
** 函数名称：UART0_QueryTxComplete
** 函数作用：查询发送是否空闲
** 输入参数：无
** 输出参数：是否空闲
** 使用范例：GM_U8 res = UART0_QueryTxComplete();
** 函数备注：
*******************************************************************************/
GM_BOOL UART0_QueryTxIdle();

/*******************************************************************************
** 函数名称：UART0_QueryRxComplete
** 函数作用：查询接收是否完成
** 输入参数：无
** 输出参数：是否完成
** 使用范例：GM_U8 res = UART0_QueryRxComplete();
** 函数备注：
*******************************************************************************/
GM_BOOL UART0_QueryRxComplete();

/*******************************************************************************
** 函数名称：UART0_SendByte
** 函数作用：无等待发送一个字节
** 输入参数：tx_data - 数据
** 输出参数：无
** 使用范例：UART0_SendByte();
** 函数备注：
*******************************************************************************/
void UART0_SendByte(GM_U8 tx_data);

/*******************************************************************************
** 函数名称：UART0_ReadByte
** 函数作用：无等待读取一个字节
** 输入参数：无
** 输出参数：数据
** 使用范例：GM_U8 rx_data = UART0_ReadByte();
** 函数备注：
*******************************************************************************/
GM_U8 UART0_ReadByte();

#endif  /* __UART_H__ */
